package com.winshare.saleAssistant.util;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class HttpClientUtil {
	private static String host = "http://open.hoau.net:8080";
	private static String encryptKey = "zlwl3246056002342llge";
	
	public static String doGet(String url, Map<String, String> param,Map<String, String> headers) {

		// 创建Httpclient对象
		CloseableHttpClient httpclient = HttpClients.createDefault();

		String resultString = "";
		CloseableHttpResponse response = null;
		try {
			// 创建uri
			URIBuilder builder = new URIBuilder(url);
			if (param != null) {
				for (String key : param.keySet()) {
					builder.addParameter(key, param.get(key));
				}
			}
			URI uri = builder.build();

			// 创建http GET请求
			HttpGet httpGet = new HttpGet(uri);
			// 添加http headers
			if (headers != null && headers.size() > 0) {
				for (String key : headers.keySet()) {
					httpGet.addHeader(key, headers.get(key));
				}
			}
			// 执行请求
			response = httpclient.execute(httpGet);
			// 判断返回状态是否为200
			if (response.getStatusLine().getStatusCode() == 200) {
				resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (response != null) {
					response.close();
				}
				httpclient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return resultString;
	}

	public static String doGet(String url) {
		return doGet(url, null,null);
	}

	public static String doPost(String url, Map<String, String> param,Map<String, String> headers) {
		// 创建Httpclient对象
		CloseableHttpClient httpClient = HttpClients.createDefault();
		CloseableHttpResponse response = null;
		String resultString = "";
		try {
			// 创建Http Post请求
			HttpPost httpPost = new HttpPost(url);
			// 添加http headers
			if (headers != null && headers.size() > 0) {
				for (String key : headers.keySet()) {
					httpPost.addHeader(key, headers.get(key));
				}
			}
			// 创建参数列表
			if (param != null) {
				List<NameValuePair> paramList = new ArrayList<NameValuePair>();
				for (String key : param.keySet()) {
					paramList.add(new BasicNameValuePair(key, param.get(key)));
				}
				// 模拟表单
				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
				httpPost.setEntity(entity);
			}
			// 执行http请求
			response = httpClient.execute(httpPost);
			resultString = EntityUtils.toString(response.getEntity(), "utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				response.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return resultString;
	}

	public static String doPost(String url) {
		return doPost(url, null,null);
	}
	
	public static String doPostJson(String url, String json,Map<String, String> headers) {
		// 创建Httpclient对象
		CloseableHttpClient httpClient = HttpClients.createDefault();
		CloseableHttpResponse response = null;
		String resultString = "";

		try {
			// 创建Http Post请求
			HttpPost httpPost = new HttpPost(url);
			// 添加http headers
			if (headers != null && headers.size() > 0) {
				for (String key : headers.keySet()) {
					httpPost.addHeader(key, headers.get(key));
				}
			}
			// 创建请求内容
			StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
			httpPost.setEntity(entity);
			// 执行http请求
			response = httpClient.execute(httpPost);
			resultString = EntityUtils.toString(response.getEntity(), "utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				response.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return resultString;
	}

	public static String doGet(String url, String param, Map<String, String> headers, int timeout) {
		String result = "";
		BufferedReader in = null;
		String reqUrl = url + "?" + param;
		try {
			// 构造httprequest设置
			RequestConfig config = RequestConfig.custom().setConnectTimeout(timeout)
					.setConnectionRequestTimeout(timeout).build();
			HttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(config).build();
			HttpGet htGet = new HttpGet(reqUrl);
			// 添加http headers
			if (headers != null && headers.size() > 0) {
				for (String key : headers.keySet()) {
					htGet.addHeader(key, headers.get(key));
				}
			}
			// 读取数据
			HttpResponse r = client.execute(htGet);
			in = new BufferedReader(new InputStreamReader(r.getEntity().getContent(), "UTF-8"));
			String line;
			while ((line = in.readLine()) != null) {
				result += line;
			}
		} catch (Exception e) {
			System.out.println("发送GET请求出现异常！" + e);
			e.printStackTrace();
		} finally {
			try {
				if (in != null) {
					in = null;
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return result;
	}

	public static void main(String[] args) {
		//System.out.println(cancel("test202004131154"));
		//System.out.println(addOrder("test202004131154", "hu", "四川省", "成都市", "武侯区", "天府新谷", "胡", "四川省", "成都市", "龙泉驿区", "恒大绿洲", "测试", "DRD", "YES", "DOORSTEP", "18380476116", "18380476116"));
		//System.out.println(queryTrack("HY20200415442022"));
		//System.out.println(query("ONE_20200415102813859002"));
		//System.out.println(estimateTotal( "四川省", "成都市", "武侯区", "希顿国际广场", "重庆市", "重庆市", "渝北区", "悦来大道66号","10000000000000000001", "DELIVERY", BigDecimal.valueOf(1),BigDecimal.valueOf(1), "0", true));
		//System.out.println(getWaybill());
	}
}

